API Gateway 控网关实现
在应用网关层中,API Gateway(如 Nginx 或 Kong)通常用于实现负载均衡、限流、认证和日志等功能。以下是具体的实现方式:
1. 负载均衡
API Gateway 的一个核心功能是将流量分发到后端的多个服务实例上,以实现负载均衡。
Nginx 实现负载均衡
- 配置多个后端服务作为上游服务器:
upstream backend_servers {
server backend1.example.com;
server backend2.example.com;
server backend3.example.com;
}
server {
listen 80;
location / {
proxy_pass http://backend_servers;
}
} - 支持多种负载均衡策略:
- 轮询(Round Robin):默认策略,依次将请求分发到后端服务。
- 最少连接数(Least Connections):将请求分发到当前连接数最少的后端。
- IP 哈希(IP Hash):根据客户端 IP 地址分发请求。
Kong 实现负载均衡
- Kong 本质上是基于 OpenResty(Nginx 的扩展)构建的。
- 通过 Upstream 和 Target 来配置负载均衡:
# 创建一个 Upstream
curl -i -X POST http://localhost:8001/upstreams \
--data "name=example_upstream"
# 添加后端 Target
curl -i -X POST http://localhost:8001/upstreams/example_upstream/targets \
--data "target=backend1.example.com:80" \
--data "weight=10"
curl -i -X POST http://localhost:8001/upstreams/example_upstream/targets \
--data "target=backend2.example.com:80" \
--data "weight=10" - 支持动态负载均衡和健康检查。
2. 限流
限流是为了防止服务被恶意请求或流量高峰冲垮。
Nginx 实现限流
- 使用
ngx_http_limit_req_module模块:http {
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
server {
location / {
limit_req zone=one burst=5 nodelay;
proxy_pass http://backend_servers;
}
}
}- rate=1r/s:每个 IP 每秒最多允许 1 个请求。
- burst=5:允许最多 5 个请求的突发流量。
Kong 实现限流
- 使用 Rate Limiting 插件:
curl -i -X POST http://localhost:8001/services/{service}/plugins \
--data "name=rate-limiting" \
--data "config.second=5" \
--data "config.minute=100"- 每秒最多 5 个请求,每分钟最多 100 个请求。
3. 认证
API Gateway 通常负责对请求进行身份验证,例如通过 API 密钥、OAuth2 或 JWT。